<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
  <!ENTITY % general-entities SYSTEM "../general.ent">
  %general-entities;
]>

<sect1 id="ch-tools-glibc" role="wrap">
  <?dbhtml filename="glibc.html"?>

  <sect1info condition="script">
    <productname>glibc</productname>
    <productnumber>&glibc-version;</productnumber>
    <address>&glibc-url;</address>
  </sect1info>

  <title>Glibc-&glibc-version;</title>

  <indexterm zone="ch-tools-glibc">
    <primary sortas="a-Glibc">Glibc</primary>
    <secondary>tools</secondary>
  </indexterm>

  <sect2 role="package">
    <title/>

    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
    href="../chapter06/glibc.xml"
    xpointer="xpointer(/sect1/sect2[1]/para[1])"/>

    <segmentedlist>
      <segtitle>&buildtime;</segtitle>
      <segtitle>&diskspace;</segtitle>

      <seglistitem>
        <seg>&glibc-ch5-sbu;</seg>
        <seg>&glibc-ch5-du;</seg>
      </seglistitem>
    </segmentedlist>

  </sect2>

  <sect2 role="installation">
    <title>Установка пакета Glibc</title>

    <para>В документации пакета Glibc рекомендуется выполнять сборку в отдельном каталоге:</para>

<screen><userinput remap="pre">mkdir -v build
cd       build</userinput></screen>

    <para>Подготовьте пакет Glibc к компиляции:</para>

<screen><userinput remap="configure">../configure                             \
      --prefix=/tools                    \
      --host=$LFS_TGT                    \
      --build=$(../scripts/config.guess) \
      --enable-kernel=&min-kernel;             \
      --with-headers=/tools/include</userinput></screen>
<!--
      libc_cv_forced_unwind=yes          \
      libc_cv_c_cleanup=yes</userinput></screen>
 -->
    <variablelist>
      <title>Значение параметров конфигурации:</title>

      <varlistentry>
        <term><parameter>--host=$LFS_TGT, --build=$(../scripts/config.guess)</parameter></term>
        <listitem>
          <para>Комбинация этих аргументов указывает системе сборки Glibc выполнять кросс-компиляцию пакета, используя кросс-компоновщик и кросс-компилятор из каталога <filename class="directory">/tools</filename>.</para>
        </listitem>
      </varlistentry>

      <varlistentry>
        <term><parameter>--enable-kernel=&min-kernel;</parameter></term>
        <listitem>
          <para>Аргумент позволяет выполнять компиляцию с поддержкой ядер начиная с версии &min-kernel; и более поздних. Поддержка более старых ядер не будет включена.</para>
        </listitem>
      </varlistentry>

      <varlistentry>
        <term><parameter>--with-headers=/tools/include</parameter></term>
        <listitem>
          <para>Аргумент позволяет выполнять компиляцию с указанием заголовочных файлов, установленных в каталог с временным набором инструментов, таким образом пакету будет известно, какие функции ядра используются, и будет выполнена оптимизация.</para>
        </listitem>
      </varlistentry>

      <!-- <varlistentry>
        <term><parameter>libc_cv_forced_unwind=yes</parameter></term>
        <listitem>
          <para>компоновщик, установленный в главе <xref linkend="ch-tools-binutils-pass1"/> был кросс-компилирован и не может использоваться, пока не будет установлен пакет Glibc. Это означает, что тест конфигурирования для функции force-unwind будет провален,поскольку он полагается на рабочий компоновщик. Значение аргумента libc_cv_forced_unwind=yes передается, чтобы сообщить, сценарию <command>configure</command> что поддержка функция force-unwind доступна без необходимости проведения тестирования.</para>
        </listitem>
      </varlistentry>
      <varlistentry>
        <term><parameter>libc_cv_c_cleanup=yes</parameter></term>
        <listitem>
          <para>Аналогично, передается значение аргумента libc_cv_c_cleanup=yes сценарию <command>configure</command> для того, чтобы тестирование не выполнялось и поддержка обработки очистки была сконфигурирована.</para>
        </listitem>
      </varlistentry> -->
<!--  <varlistentry>
        <term><parameter>libc_cv_ctors_header=yes</parameter></term>
        <listitem>
          <para>Similarly, we pass libc_cv_ctors_header=yes through to the
          <command>configure</command> script so that the test is skipped and
          gcc constructor support is configured.</para>
        </listitem>
      </varlistentry>-->

    </variablelist>

    <para>На этапе конфигурирования могут появиться следующие предупреждения:</para>

    <blockquote>
<screen><computeroutput>configure: WARNING:
*** These auxiliary programs are missing or
*** incompatible versions: msgfmt
*** some features will be disabled.
*** Check the INSTALL file for required versions.</computeroutput></screen>
    </blockquote>

    <para>Отсутствие или несовместимость программы <command>msgfmt</command> безвредно. Это программа является частью пакета Gettext, который должен быть предоставлен хост-системой.</para>

    <note><para>Сообщалось, что этот пакет может не компилироваться при выполнении процедуры "параллельной сборки". Если это произойдет, повторите команду make с аргументом "-j1".</para></note>

    <para>Скомпилируйте пакет:</para>

<screen><userinput remap="make">make</userinput></screen>

    <para>Установите пакет:</para>

<screen><userinput remap="install">make install</userinput></screen>

  <caution>
    <para>На этом этапе, необходимо остановиться, и проверить что базовый функционал (компиляция и линовка) созданных инструментов работает так, как необходимо. Чтобы выполнить проверку работоспособности, выполните следующие команды:</para>

<screen><userinput>echo 'int main(){}' &gt; dummy.c
$LFS_TGT-gcc dummy.c
readelf -l a.out | grep ': /tools'</userinput></screen>

    <para>Если все работает правильно, не должно быть ошибок, и вывод последней команды будет иметь вид:</para>

<screen><computeroutput>[Requesting program interpreter: /tools/lib64/ld-linux-x86-64.so.2]</computeroutput></screen>

    <para>Обратите внимание, что на 32-битной машине наименование интерпретатора будет:<filename>/tools/lib/ld-linux.so.2</filename>.</para>

    <para>Если вывод не соответствует тому, как показано выше, или вообще вывода нет, значит,что-то не так. Изучите и повторите шаги выше, чтобы выяснить
     где проблема и устраните её. Важно, устранить проблему до того, как вы продолжите следующие шаги.</para>

    <para>Когда все будет хорошо, очистите тестовые файлы:</para>

<screen><userinput>rm -v dummy.c a.out</userinput></screen>

  </caution>

  <note><para>При сборке пакета Binutils в следующем разделе, будут производиться дополнительные проверки, что временный набор инструментов был собран правильно. Если пакет Binutils не получится скомпилировать, или сконфигурировать, это будет явный признак того, что что-то пошло не так с предыдущими установками пакетов Binutils, GCC, или Glibc.</para></note>

  </sect2>

  <sect2 role="content">
    <title/>

    <para>Подробная информация об этом пакете находится в
    <xref linkend="contents-glibc" role="."/></para>

  </sect2>

</sect1>
